package com.ruoyi.common.utils.check;

import java.time.LocalDate;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CropSeasonUtils {

    private static final int THRESHOLD_DAYS = 5; // 判断“马上”或“暂时超过”的阈值天数

    /**
     * 根据种植时间范围判断当前状态
     *
     * @param dateRange 时间范围，格式如："2月8号-3月31号" 或 "2月8日-3月31日"
     * @return 状态字符串："适宜"、"马上"、"未到"、"暂时超过"、"已超过"、"未知"（格式错误）
     */
    public static String checkPlantingStatus(String dateRange) {
        if (dateRange == null || dateRange.trim().isEmpty()) {
            return "未知";
        }

        // 解析开始月、日 和 结束月、日
        Pattern pattern = Pattern.compile("(\\d+)[月|\\s](\\d+)[号|日]\\s*-\\s*(\\d+)[月|\\s](\\d+)[号|日]");
        Matcher matcher = pattern.matcher(dateRange.trim());
        if (!matcher.find()) {
            return "未知"; // 格式不匹配
        }

        int startMonth = Integer.parseInt(matcher.group(1));
        int startDay = Integer.parseInt(matcher.group(2));
        int endMonth = Integer.parseInt(matcher.group(3));
        int endDay = Integer.parseInt(matcher.group(4));

        LocalDate now = LocalDate.now();
        int currentYear = now.getYear();

        // 构建开始和结束日期（使用当前年份）
        LocalDate start;
        LocalDate end;

        try {
            start = LocalDate.of(currentYear, startMonth, startDay);
            end = LocalDate.of(currentYear, endMonth, endDay);
        } catch (Exception e) {
            return "未知"; // 日期无效，如 2月30日
        }

        // 处理跨年情况（如：10月-2月）
        if (start.isAfter(end)) {
            end = end.plusYears(1);
        }

        // 判断当前日期状态
        long daysUntilStart = java.time.temporal.ChronoUnit.DAYS.between(now, start);
        long daysAfterEnd = java.time.temporal.ChronoUnit.DAYS.between(end, now);

        if (!now.isBefore(start) && !now.isAfter(end)) {
            // 当前日期在种植适期范围内（含起止日期）
            return "适宜";
        } else if (daysUntilStart > 0) {
            // 当前日期早于开始日期，尚未进入种植期
            if (daysUntilStart <= THRESHOLD_DAYS) {
                // 距离适宜种植期开始不超过5天，即将进入最佳种植窗口
                return "即将适宜";
            } else {
                // 距离种植期开始还有较长时间，暂不适宜准备
                return "未到时机";
            }
        } else if (daysAfterEnd > 0) {
            // 当前日期已超过种植适期结束日
            if (daysAfterEnd <= THRESHOLD_DAYS) {
                // 超出结束日期不超过5天，尚可补种或视为尾声期
                return "已过最佳期";
            } else {
                // 已明显错过种植窗口，进入非适宜期
                return "不宜种植";
            }
        }

        return "未知"; // 理论上不会走到这里
    }

    // --- 测试用例 ---
    public static void main(String[] args) {
        // 示例测试
        System.out.println(checkPlantingStatus("2月8号-3月31号"));   // 根据今天日期输出
        System.out.println(checkPlantingStatus("1月1日-1月10日"));    // 已超过（假设今天是10月）
        System.out.println(checkPlantingStatus("12月1日-12月10日"));  // 未到 或 马上
        System.out.println(checkPlantingStatus("10月10日-10月12日")); // 适宜（如果今天是10月11日）
        System.out.println(checkPlantingStatus("invalid"));          // 未知
    }



//    /**
//     * 初始化适宜种植状态（基于公历种植范围）
//     * @param plantingDateRange 格式如 "3月1日 - 4月15日"
//     * @return true 表示当前在适宜种植期内，false 表示不在
//     */
//    public static boolean initSuitablePlantingStatus(String plantingDateRange) {
//        if (plantingDateRange == null || plantingDateRange.isEmpty()) {
//            return false;
//        }
//
//        // 正则提取“月”和“日”
//        Pattern pattern = Pattern.compile("(\\d+)月(\\d+)日\\s*-\\s*(\\d+)月(\\d+)日");
//        Matcher matcher = pattern.matcher(plantingDateRange);
//        if (!matcher.find()) {
//            return false;
//        }
//
//        int startMonth = Integer.parseInt(matcher.group(1));
//        int startDay = Integer.parseInt(matcher.group(2));
//        int endMonth = Integer.parseInt(matcher.group(3));
//        int endDay = Integer.parseInt(matcher.group(4));
//
//        LocalDate now = LocalDate.now();
//        int currentMonth = now.getMonthValue();
//        int currentDay = now.getDayOfMonth();
//
//        // 构造开始和结束日期（使用当前年份）
//        LocalDate start = LocalDate.of(now.getYear(), startMonth, startDay);
//        LocalDate end = LocalDate.of(now.getYear(), endMonth, endDay);
//
//        // 如果跨年（如 10月 - 2月），则结束日期为明年
//        if (start.isAfter(end)) {
//            end = end.plusYears(1);
//            // 判断当前日期是否在 [start, end] 范围内
//            return (now.isEqual(start) || now.isAfter(start)) &&
//                    (now.isEqual(end) || now.isBefore(end));
//        } else {
//            // 正常情况：同年区间
//            return (now.isEqual(start) || now.isAfter(start)) &&
//                    (now.isEqual(end) || now.isBefore(end));
//        }
//    }
//
//    public static boolean initSuitablePlantingStatusNew(String plantingDateRange) {
//        if (plantingDateRange == null || !plantingDateRange.contains("月") || !plantingDateRange.contains("-")) {
//            return false;
//        }
//
//        // 提取数字
//        Pattern p = Pattern.compile("(\\d+)月(\\d+)日");
//        Matcher m = p.matcher(plantingDateRange);
//
//        if (!m.find()) return false;
//        int startMonth = Integer.parseInt(m.group(1));
//        int startDay = Integer.parseInt(m.group(2));
//
//        if (!m.find()) return false;
//        int endMonth = Integer.parseInt(m.group(1));
//        int endDay = Integer.parseInt(m.group(2));
//
//        LocalDate now = LocalDate.now();
//        LocalDate start = LocalDate.of(now.getYear(), startMonth, startDay);
//        LocalDate end = LocalDate.of(now.getYear(), endMonth, endDay);
//
//        // 处理跨年（如 10月 - 2月）
//        if (start.isAfter(end)) {
//            end = end.plusYears(1);
//        }
//
//        return !now.isBefore(start) && !now.isAfter(end); // 在区间内（含首尾）
//    }
//
//    // --- 测试用例 ---
//    public static void main(String[] args) {
//        // 示例测试
//        System.out.println(checkPlantingStatusNew("2月8号-3月31号"));   // 根据今天日期输出
//        System.out.println(checkPlantingStatus("1月1日-1月10日"));    // 已超过（假设今天是10月）
//        System.out.println(checkPlantingStatus("12月1日-12月10日"));  // 未到 或 马上
//        System.out.println(checkPlantingStatus("10月10日-10月12日")); // 适宜（如果今天是10月11日）
//        System.out.println(checkPlantingStatus("invalid"));          // 未知
//    }
}
